/*
 * TeleStax, Open Source Cloud Communications  Copyright 2012.
 * and individual contributors
 * by the @authors tag. See the copyright.txt in the distribution for a
 * full listing of individual contributors.
 *
 * This is free software; you can redistribute it and/or modify it
 * under the terms of the GNU Lesser General Public License as
 * published by the Free Software Foundation; either version 2.1 of
 * the License, or (at your option) any later version.
 *
 * This software is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with this software; if not, write to the Free
 * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
 * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
 */

package org.mobicents.protocols.ss7.tools.simulator.tests.ussd;

import javolution.xml.XMLFormat;
import javolution.xml.stream.XMLStreamException;

import org.mobicents.protocols.ss7.map.api.primitives.AddressNature;
import org.mobicents.protocols.ss7.map.api.primitives.NumberingPlan;

/**
 * 
 * @author sergey vetyutnev
 * 
 */
public class TestUssdServerConfigurationData {

	protected static final String MSISDN_ADDRESS = "msisdnAddress";
	protected static final String MSISDN_ADDRESS_NATURE = "msisdnAddressNature";
	protected static final String MSISDN_NUMBERING_PLAN = "msisdnNumberingPlan";
	protected static final String DATA_CODING_SCHEME = "dataCodingScheme";
	protected static final String ALERTING_PATTERN = "alertingPattern";
	protected static final String PROCESS_SS_REQUEST_ACTION = "processSsRequestAction";
	protected static final String AUTO_RESPONSE_STRING = "autoResponseString";
	protected static final String AUTO_UNSTRUCTURED_SS_REQUEST_STRING = "autoUnstructured_SS_RequestString";
	protected static final String ONE_NOTIFICATION_FOR_100_DIALOGS = "oneNotificationFor100Dialogs";

	protected String msisdnAddress = "";
	protected AddressNature msisdnAddressNature = AddressNature.international_number;
	protected NumberingPlan msisdnNumberingPlan = NumberingPlan.ISDN;
	protected int dataCodingScheme = 0x0F;
	protected int alertingPattern = -1;
	protected ProcessSsRequestAction processSsRequestAction = new ProcessSsRequestAction(ProcessSsRequestAction.VAL_MANUAL_RESPONSE);
	protected String autoResponseString = "";
	protected String autoUnstructured_SS_RequestString = "";
	protected boolean oneNotificationFor100Dialogs = false;

	public String getMsisdnAddress() {
		return msisdnAddress;
	}
	
	public void setMsisdnAddress(String msisdnAddress) {
		this.msisdnAddress = msisdnAddress;
	}

	public AddressNature getMsisdnAddressNature() {
		return msisdnAddressNature;
	}

	public void setMsisdnAddressNature(AddressNature msisdnAddressNature) {
		this.msisdnAddressNature = msisdnAddressNature;
	}

	public NumberingPlan getMsisdnNumberingPlan() {
		return msisdnNumberingPlan;
	}

	public void setMsisdnNumberingPlan(NumberingPlan msisdnNumberingPlan) {
		this.msisdnNumberingPlan = msisdnNumberingPlan;
	}

	public int getDataCodingScheme() {
		return dataCodingScheme;
	}

	public void setDataCodingScheme(int dataCodingScheme) {
		this.dataCodingScheme = dataCodingScheme;
	}

	public int getAlertingPattern() {
		return alertingPattern;
	}

	public void setAlertingPattern(int alertingPattern) {
		this.alertingPattern = alertingPattern;
	}

	public ProcessSsRequestAction getProcessSsRequestAction() {
		return processSsRequestAction;
	}

	public void setProcessSsRequestAction(ProcessSsRequestAction processSsRequestAction) {
		this.processSsRequestAction = processSsRequestAction;
	}

	public String getAutoResponseString() {
		return autoResponseString;
	}

	public void setAutoResponseString(String autoResponseString) {
		this.autoResponseString = autoResponseString;
	}

	public String getAutoUnstructured_SS_RequestString() {
		return autoUnstructured_SS_RequestString;
	}

	public void setAutoUnstructured_SS_RequestString(String autoUnstructured_SS_RequestString) {
		this.autoUnstructured_SS_RequestString = autoUnstructured_SS_RequestString;
	}

	public boolean isOneNotificationFor100Dialogs() {
		return oneNotificationFor100Dialogs;
	}

	public void setOneNotificationFor100Dialogs(boolean oneNotificationFor100Dialogs) {
		this.oneNotificationFor100Dialogs = oneNotificationFor100Dialogs;
	}

	protected static final XMLFormat<TestUssdServerConfigurationData> XML = new XMLFormat<TestUssdServerConfigurationData>(TestUssdServerConfigurationData.class) {

		public void write(TestUssdServerConfigurationData srv, OutputElement xml) throws XMLStreamException {
			xml.setAttribute(DATA_CODING_SCHEME, srv.dataCodingScheme);
			xml.setAttribute(ALERTING_PATTERN, srv.alertingPattern);
			xml.setAttribute(ONE_NOTIFICATION_FOR_100_DIALOGS, srv.oneNotificationFor100Dialogs);

			xml.add(srv.msisdnAddress, MSISDN_ADDRESS, String.class);
			xml.add(srv.autoResponseString, AUTO_RESPONSE_STRING, String.class);
			xml.add(srv.autoUnstructured_SS_RequestString, AUTO_UNSTRUCTURED_SS_REQUEST_STRING, String.class);
			
			xml.add(srv.msisdnAddressNature.toString(), MSISDN_ADDRESS_NATURE, String.class);
			xml.add(srv.msisdnNumberingPlan.toString(), MSISDN_NUMBERING_PLAN, String.class);
			xml.add(srv.processSsRequestAction.toString(), PROCESS_SS_REQUEST_ACTION, String.class);
		}

		public void read(InputElement xml, TestUssdServerConfigurationData srv) throws XMLStreamException {
			srv.dataCodingScheme = xml.getAttribute(DATA_CODING_SCHEME).toInt();
			srv.alertingPattern = xml.getAttribute(ALERTING_PATTERN).toInt();
			srv.oneNotificationFor100Dialogs = xml.getAttribute(ONE_NOTIFICATION_FOR_100_DIALOGS).toBoolean();

			srv.msisdnAddress = (String) xml.get(MSISDN_ADDRESS, String.class);
			srv.autoResponseString = (String) xml.get(AUTO_RESPONSE_STRING, String.class);
			srv.autoUnstructured_SS_RequestString = (String) xml.get(AUTO_UNSTRUCTURED_SS_REQUEST_STRING, String.class);
			
			String an = (String) xml.get(MSISDN_ADDRESS_NATURE, String.class);
			srv.msisdnAddressNature = AddressNature.valueOf(an);
			String np = (String) xml.get(MSISDN_NUMBERING_PLAN, String.class);
			srv.msisdnNumberingPlan = NumberingPlan.valueOf(np);
			String ss_act = (String) xml.get(PROCESS_SS_REQUEST_ACTION, String.class);
			srv.processSsRequestAction = ProcessSsRequestAction.createInstance(ss_act);
		}
	};

}
